package at.horario.model;

//~--- non-JDK imports --------------------------------------------------------

import javax.persistence.*;
import static javax.persistence.FetchType.LAZY;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * Grupo descricao
 *
 * @author AT�
 * @version 1.0, 2007.05.02 at 09:35:21 CAT
 */
@Entity
public class Grupo extends GenericObject<String> implements Serializable {
    @Id
    @Column(length = 20)
    private String grupoNome;
    @Column(length = 50)
    private String descricao;
    @Column(length = 9)
    private Integer ordem;

    @ManyToMany(targetEntity = Disciplina.class, fetch = LAZY)
    @JoinTable(
            name = "DisciplinaGrupo",
            joinColumns = {@JoinColumn(name = "grupoNome")},
            inverseJoinColumns = {@JoinColumn(name = "disciplinaID")}
    )
    private Set<Disciplina> disciplinas = new HashSet<Disciplina>();

    @ManyToMany(targetEntity = Classe.class, fetch = LAZY)
    @JoinTable(
            name = "ClasseGrupo",
            joinColumns = {@JoinColumn(name = "grupoNome")},
            inverseJoinColumns = {@JoinColumn(name = "classeID")}
    )
    private Set<Classe> classes = new HashSet<Classe>();

    public Grupo(String grupoNome, String descricao, Integer ordem) {
        this.grupoNome = grupoNome;
        this.descricao = descricao;
        this.ordem = ordem;
    }

    public Grupo() {
    }

    public Set<Classe> getClasses() {
        return classes;
    }

    public void setClasses(Set<Classe> classes) {
        this.classes = classes;
    }

    public String getGrupoNome() {
        return grupoNome;
    }

    public void setGrupoNome(String grupoNome) {
        this.grupoNome = grupoNome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Set<Disciplina> getDisciplinas() {
        return disciplinas;
    }

    public void setDisciplinas(Set<Disciplina> disciplinas) {
        this.disciplinas = disciplinas;
    }

    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Grupo)) return false;

        Grupo grupo = (Grupo) o;

        return !(grupoNome != null ? !grupoNome.equals(grupo.grupoNome) : grupo.grupoNome != null);

    }

    public int hashCode() {
        int result;
        result = (grupoNome != null ? grupoNome.hashCode() : 0);
        result = 31 * result + (descricao != null ? descricao.hashCode() : 0);
        return result;
    }

    public String getId() {
        return grupoNome;
    }

    public Integer getOrdem() {
        return ordem;
    }

    public void setOrdem(Integer ordem) {
        this.ordem = ordem;
    }


    public String toString() {
        return "Grupo{" +
                "grupoNome='" + grupoNome + '\'' +
                ", descricao='" + descricao + '\'' +
                ", ordem=" + ordem +
                '}';
    }
}
